// any() 接收一个返回布尔值（真或假）的闭包。它将这个闭包应用于迭代器的每个元素上，如果其中有任何一个元素使得该闭包返回 true，那么 any() 就返回 true。
// 如果所有元素都使闭包返回 false，那它就返回 false。

// find() 接收一个返回布尔值（真或假）的闭包。它将这个闭包应用于迭代器的每个元素上，如果其中有任何一个元素使得该闭包返回 true，那么 
// find() 就会返回 Some(元素)。如果所有元素都使闭包返回 false，它就返回 None。
// find() 是短路求值的；换句话说，一旦闭包返回 true，它就会停止处理。
fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];
    // 'any'方法会自动地把'vec.iter()'举出的迭代器的元素一个个传给闭包，因此闭包接收的到参数是'&i32'类型
    println!("2 in vec1: {}", vec1.iter().any(|&x| x % 3 == 0));
    // 使用 into_iter() 方法将 vec2 转换为一个迭代器，然后调用 any() 方法检查，把迭代器元素传入闭包中，接收的参数是'i32'类型的闭包的值
    println!("2 in vec2: {}", vec2.into_iter().any(|x| x ==2));
    // println!("2 in vec2: {}", vec2.into_iter().any(|x| x ==2));
    // ^试一试去掉注释,看看会发生什么，into_iter是消费迭代器或叫解构，迭代器的所有权就被转移了，所以vec2就没有了，所以就找不到了
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];
    // 'find'方法会把迭代器元素的引用传给闭包，迭代器元素自身是`&i32`类型的，所以闭包接收的参数是'&&i32'类型的
    println!("Find 2 in vec1: {:?}", vec1.iter().find(|&&x| x == 2));
    // 对迭代器举出的元素的引用是`&i32`类型的。解构成`i32`类型的.
    println!("Find 2 in vec2: {:?}", vec2.into_iter().find(|&x| x == 2));
    // println!("Find 2 in vec2: {:?}", vec2.into_iter().find(|&x| x == 6));
    // ^试一试去掉注释,看看会发生什么，into_iter是消费迭代器或叫解构，迭代器的所有权就被转移了，所以vec2就没有了，所以就找不到了
}
